Auto merge of #3609 - jmatraszek:build_proper_binary, r=alexcrichton
authorbors <bors@rust-lang.org>
Thu, 2 Feb 2017 02:15:05 +0000 (02:15 +0000)
committerbors <bors@rust-lang.org>
Thu, 2 Feb 2017 02:15:05 +0000 (02:15 +0000)
Fix building multiple binaries that do not have path spacified in Cargo.toml

When multiple binaries are specified in Cargo.toml, the binaries that do not have `path` specified are build from `src/main.rs`. Discovered here: https://github.com/rust-lang-nursery/thanks/pull/40#issuecomment-275493045.

This was caused by setting for a binary a main layout here https://github.com/rust-lang/cargo/blob/master/src/cargo/util/toml.rs#L478, which caused `normalize` to not fallback to default binary path here https://github.com/rust-lang/cargo/blob/master/src/cargo/util/toml.rs#L1149 (as `bin.path` was always `Some("/path/to/main.rs")`.

Added a test and fixed this by not using `layout.main()`, so right now for bins without `path` specified we fallback to default path inferred from bin's name (e.g. `src/bin/foo.rs`), test if the file exists and only if it doesn't -- fallback to `src/main.rs`.

I do not have any knowledge about Cargo's design, so I am not sure if this is the proper place to test for file existence.


Trivial merge